#define _CRT_SECURE_NO_WARNINGS 1

//#include<iostream>
//#include<cstring>
//#include<stack>
//
//using namespace std;
//
//const int N = 500010;
//
//char s[N];
//stack<int> s1, s2;
//int k;
//
//int main()
//{
//    scanf("%d", &k);
//
//    char c1, c2;
//    scanf("%s %c %c", s, &c1, &c2);
//    int n = strlen(s);
//
//    for (int i = n; i >= 0; i--)
//    {
//        if (s[i] == c1)  s1.push(i);
//        if (s[i] == c2)  s2.push(i);
//    }
//
//    int res = 0;
//    while (!s1.empty() && !s2.empty())
//    {
//        while (!s2.empty() && s1.top() + k - 1 > s2.top())
//            s2.pop();
//        res += s2.size();
//        s1.pop();
//    }
//
//    printf("%d\n", res);
//    return 0;
//}

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

typedef long long LL;
typedef pair<LL, int> PLI;

const int N = 5e5 + 10;

LL a[N];
int d[N], l[N], r[N];
int n, k;

int main()
{
    scanf("%d%d", &n, &k);

    priority_queue<PLI, vector<PLI>, greater<PLI>> pq;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        pq.push(make_pair(a[i], i));
        l[i] = i - 1;
        r[i] = i + 1;
    }

    while (k--)
    {
        int p = pq.top().second;
        LL v = pq.top().first + d[p];
        pq.pop();

        d[l[p]] += v, d[r[p]] += v;
        r[l[p]] = r[p], l[r[p]] = l[p];
    }

    for (int i = r[0]; i != n + 1; i = r[i])
        cout << a[i] + d[i] << " ";

    return 0;
}